package com.shuai.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.shuai.dao.ProjectDao;
import com.shuai.dao.SubProjectDao;
import com.shuai.model.vo.ProjectVO;
import com.shuai.model.vo.SubProjectVO;
import com.shuai.service.SubProjectService;
import com.shuai.utils.PageUtil;
import com.shuai.utils.R;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Map;

@Service
public class SubProjectServiceImpl implements SubProjectService {

    @Autowired
    private SubProjectDao subProjectDao;

    @Resource
    private ProjectDao projectDao;

    @Override
    public R searchSubProject(Map<String, Object> params) {
        params = PageUtil.page(params);
        Map<String, Object> res = this.subProjectDao.totalSize(params);
        List<SubProjectVO> subProjectVOS = this.subProjectDao.selectSubProjectList(params);
        res.put("subProjectList", subProjectVOS);
        return R.ok(res);
    }


    @Override
    public R selectPropAllSubProject(ProjectVO vo) {
        Map<String, Object> stringObjectMap = this.subProjectDao.selectPropAllSubProject(vo);
        return R.ok(stringObjectMap);
    }

    @Override
    public R updateSubProject(SubProjectVO vo) {
        int i = this.subProjectDao.updateSub(vo);
        if (vo.getProp() != null) {
            SubProjectVO subProjectVO = this.subProjectDao.selectById(vo.getSubprojectId());
            this.projectDao.updateTaskCompletion(subProjectVO.getProjectId());
        }
        return i > 0 ? R.ok() : R.er();
    }

    @Override
    public R delSub(SubProjectVO vo) {
        LambdaUpdateWrapper<SubProjectVO> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.set(SubProjectVO::getDelflag, 1).eq(SubProjectVO::getSubprojectId, vo.getSubprojectId());
        int i = this.subProjectDao.update(updateWrapper);
        if (i > 0) {
            SubProjectVO subProjectVO = this.subProjectDao.selectById(vo.getSubprojectId());
            this.projectDao.updateTaskCompletion(subProjectVO.getProjectId());
        }
        return i > 0 ? R.ok() : R.er();
    }

    @Override
    public R addSubProject(SubProjectVO vo) {
        //TODO 验证当前项目的子项目的名字是否重复
        LambdaQueryWrapper<SubProjectVO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(SubProjectVO::getProjectId, vo.getProjectId())
                .eq(SubProjectVO::getSubProjectName, vo.getSubProjectName())
                .eq(SubProjectVO::getDelflag, "0");
        SubProjectVO subProjectVO = this.subProjectDao.selectOne(lambdaQueryWrapper);
        if (subProjectVO != null) {
            return R.checkProjectERROR();
        }

        vo.setIntime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        int insert = this.subProjectDao.insert(vo);
        if (insert > 0) {
            return R.ok();
        } else {
            return R.er();
        }
    }

}